<?php
/*
Фронт-КОнтроллер

если нужно сразу вызвать заданный метод, нужно создать контроллер, контроллер модуля и попытаться "инициализировать" запрашиваемую точку входа 

[test]
        ob_start();
        print_r($this->registry->get('session'));
           $a = ob_get_clean();  
        fb($a);
        
         console($reg);
         console($reg->get('session')->data['user']->role);
*/
die();
define('SMARTY_DIR', $_SERVER['DOCUMENT_ROOT'] . '/Engine/Smarty/');    
require_once(SMARTY_DIR . 'Smarty.class.php');
require_once(SITE . '/Engine/Controller/abstract.Interface.php');
require_once(SITE . '/Engine/Controller/BD.php');
 
class Controller extends controllerInterface{
// Класс Фронт-контроллера
    protected $view;
    protected $model;
    protected $BD = null;
    protected $registry;
    
    static public $instance; 
    
    public $modul_index = ''; // face
    public $modul_name = ''; // Face
    public $virtual_modul_name = ''; // About
    public $modul_controller;
    public $modul_html;
    public $modul_info ;  
    public $modul_class_name = ''; // FaceModul
    public $method;
    public $ArgMod;
    public $html = '';
    public $css_arr = array();
    public $js_arr = array();
   
    
    protected $output; // html, сгенерированный конкретным модулем 
    protected $widget_enter_data;  // входные данные для виджетов
    
    private $modul  = false; // контроллер конкретнрого модуля
    
    
   // protected $smarty; // ?

    function __construct($registry = null){
             
        
        if($registry !== null ){
            $this->registry = $registry;  
            $this->BD = $this->registry->get('db');
        } else {
            $this->registry = Registry::getInstance();
        }  
        
        //
        $this->loadStartJS();

        // FirePHP
        $firephp = FirePHP::getInstance(true);
        $this->registry->set('firephp', $firephp);

        
        // модель
        $this->model = new Model($registry);
        $registry->set('Model', $this->model);
         
        // представление    
        //$View = new View($registry);
        $this->view = View::getInstance();
        $registry->set('View', $this->view); 
        
        // Берем 0 аргумент URI
        $this->modul_index = $this->getURIarg(0);
       
        if( $this->modul_index == '' )   $this->modul_index = "face"; // Модуль по умолчанию
      
        if( $this->modul_index == 'core' ) return $this->loadCoreController();
      
        // [!]
        // Передать управление контроллеру модуля
        // Контроллер модуля вернет html и, возможно, массив входных данных для установленных виджетов
        // вызвать требуемые виджеты, получить от них html
        // Передать html модуля и html виджетов во View
        // Получепнный отклик вернуть Контроллеру, который инициирует вывод
        //
        // Контроллер модуля создает объекты: new Modul.Model, new Modul.View и возвращает html-код модуля + данные на вход нужных виджетов
        // Фронт-контроллер проверяет массив на предмет данных для виджетов, если надо, опрашивает эти виджеты и берет их ответы, 
        // после чего отдает кол модуля и html-код виджетов Представлению
        //
        // [?] Представление выводит код самостоятельно или вывод инициирует Фронт-контроллер?  
        // --------------------------------------------
        // [!]
        // Работа Фронт КОнтроллера.
        // Разобрать URL
        // Создать объект ModulController (Отработать шаблон Factory)
        // В случае неуспеха выдать ошибку, в случае успеха - получить $modul_html и $widget_inputdata_arr
        // срендерить html виджетов
        // Создать объект Model
        // (!) здесь возможен вызов дополнительной логики из Модели движка. 
        // срендерить шаблон (main.tpl + $modul_html + widget html)
        // Создать обхект View
        // echo $html  
      fb(1);die;
        //  Выдать модуль        
        if($this->modulExists() === true){  
            // if запрос из ajax
             
            // if передано число
             
            $this->registry->set('modul_class_name',$this->modul_class_name); // FaceModul
            $this->registry->set('modul_index',substr($this->modul_class_name, 0, -5)); // Face 
             //var_dump($this->modul_class_name);
            // создаем контроллер модуля
            
            try {     
              $name = $this->modul_class_name;
              //$obj = static::getInstance(); 
              $obj = new $name($this->registry);
              //$obj->registry = $this->registry;
              if(is_object($obj)){
                $this->modul_controller = $obj;
                
              } else            
                $this->modul_controller = new $this->modul_class_name($this->registry);
                
            } catch (Exception  $e) {
                echo 'Caught exception: ',  $e->getMessage(), "\n";
            }
          
           
            $err_404 = false;
             
            
            // ---------------------------
            // Объект Model
            //$this->model = new Model(); 
            //$this->smarty = $this->model->getParam('smarty');
            
            // if передан дескриптор - проверить наличие метода
            if($second_url_arg = $this->getURIarg(1)){             
            // [!] Здесь можно вставить парсинг урл для отлавливания особых адресов, напр, админских
            
              // TODO отрефакторить if
              if($second_url_arg == 'param'){ // 'param' означает, что за ним идут параметры для основного экшена модуля Face::actionFaceBasic()
                  $this->modul_controller->action = 'action' . $this->modul_name . 'Basic' ;
                  if( ($this->registry->get('virtual_modul_index')) != '')
                      $this->modul_controller->action = 'action' . $this->registry->get('virtual_modul_index') . 'Basic';
                   
                  // [!] получить массив параметров и передать их модулю
                  $basic_act_param = array('1'=>1);
                  $this->modul_controller->basic_act_param = $basic_act_param;  
                      
              } else {
              // рассматриваем второй параметр как имя экшена или точки входа, или как название раздела
            
                // пытаемся взять section_id
                $s_id_1 = (int)$this->model->getSectionIdByName( $second_url_arg );
                $s_id_2 = (int)$this->model->getSectionIdByName($this->model->translitBackToCyr($second_url_arg));
                
                
            
                if( ($section_id = $this->model->getSectionIdByName($this->model->translitBackToCyr($second_url_arg)) ) !== false)
                   $registry->set('section_id', $section_id);  
 
                $second_url_arg = $this->model->translitEncodedURL($second_url_arg);
                $second_url_arg = preg_replace('/_/i','',$second_url_arg);
                
                
             
            
                $this->method = $second_url_arg; // $this->getURIarg(1);
                 
                
                if($this->methodExists()){ 
                // если есть одноименная точка входа, передаем управление ей 
                
                    //$this->html = $this->view->loadMethod($this->method);//?
                      $this->modul_controller->action = $this->method; // здесь уже готовый метод типа actionFaceAsd
                } else {
                // иначе, пробуем загрузить раздел
                    if($s_id_1 > 0 OR $s_id_2 > 0){
                      $this->modul_controller->action = 'sectionLoader';
                      
                      if($s_id_1 > 0) $registry->set('section_id', $s_id_1);
                      if($s_id_2 > 0) $registry->set('section_id', $s_id_2);
                    } else {
                    // если раздел не существует, выдать ошибку
                      $err_404 = true; fb(77);
                      $modul_html =  $this->view->fetch('404.tpl');
                    }  
                }  
              }    
            } else {  
            // если нет второго аргумента в урле, вызвать метод Face::actionFace()
                  // $this->capitalizeFirst($this->modul_index)
                  $this->modul_controller->action = 'action' . $this->modul_name . 'Basic' ; // загружаем базовый экшн реального модуля
                  if( ($this->registry->get('virtual_modul_index')) != ''){
                      $this->modul_controller->action = 'action' . $this->registry->get('virtual_modul_index') . 'Basic'; // либо виртуального
                  }
            }
            // входные данные для виджетов
            // [!] передать этот массив в обработку объекту widget
            // [!] вместо этого - класть этот массив в соответсвующую ячейку registry->widgets_arr
            // предполагается, что модуль уже положил инпут_дату в реестр, откуда ее вытащит Widget
            // $this->registry->widget_inputdata_arr = $this->modul_controller->widget_inputdata_arr;
             
            //
            $this->addModulCss($this->modul_name); 
            
            //
            $this->addModulJs($this->modul_name);
            
            //$this->addJs('jquery.blockUI.js', $get_script_from_standard_dir = true); 
            //$this->addJs('jquery.form.js', $get_script_from_standard_dir = true); 
            
            
              
        } else {
            // модуль не существует
            // [!]   передать управление View, чтобы он вывел шаблон 404.tpl 
            // $this->view->get404() 
            $err_404 = true; 
            fb(22);
            $modul_html =  
            $this->view->fetch('404.tpl');
            
        }
      
      
        // передать управленеи модулю
        if($err_404 !== true AND is_object($this->modul_controller)){ 
          // [!] раскоментить
          //$this->modul_controller->action = 'dsc';
          
          $this->modul_controller->load();
        
          // берем html-код, сгенерированный модулем            
          $modul_html = $this->modul_controller->getHtml();
        } else {  
        // ошибка 404
        }
        
        // опрос виджетов на предмет html-кода       
        $this->setWidgetsHtml();
        
        
         
       
        
        
        // [!] Здесь можно установить переменные
        // эта 'asd' затрет asd, инициализированную в модуле
        // $this->view->Set('asd',$modul_html);
        // Здесь выставлять html, сгенеренный виджетами?
        
        $reg = Registry::getInstance();
        if( $reg->has('js') ) $js = $reg->get('js');
        
        if(isset($js)) if( is_array($js) )
        if(isset($this->js_arr)) if( is_array($this->js_arr) ) $this->js_arr = array_merge($this->js_arr, $js);
        
        
        $this->view->Set('css', $this->css_arr);
        $this->view->Set('js', $this->js_arr);   
        
        $this->view->Set('modul_html',$modul_html);     //session_destroy(); $reg->set('session',null);  // [!] test
        
        // пытаемся рендерить окончательную страницу
        $this->view->tpl = $this->getBasicModulTpl();  // _main.tpl, например
        $this->view->render();  
        $this->html = $this->view->output();
        
    } // -- __construct()
    
    function setWidgetsHtml(){
    
        $Widget = $this->registry  -> get('Widget');
        $Widget->constructWidgetsArr($this->getBasicModulTpl());
        
        $widgets_arr = $this->registry->get('widgets_arr');
        
        if(is_null($widgets_arr) OR $widgets_arr === false) return null;
        
        // TODO
        // [!] сконструировать массив виджетов, привязанных к шаблону и вытянуть код именно их
        
        foreach($widgets_arr as $widget){ 
            $name = $widget['widget']['widgets_name'];
            $html = $widget['output_html'];
            $this->view->Set($name.'_widget',$html);  // {$Login_widget}
        }
    
    } // --
    
    function loadStartJS(){ 
     
        $host = 'http://' . $_SERVER['HTTP_HOST'] . '/'; //xn--80abed0aox0aj.com.ua/';";
     
        $js = "
        // -- global vars --
        
        var basic_path = '$host';
        
        // -----------------";
        
        $js = "<script  type='text/javascript'>  $js  </script>";
    
        
        //$r = Registry::getInstance(); 
        //$js_arr =   $r->get('js');
  
        if(isset($this->js_arr))
        if(is_array($this->js_arr)){
          if(($res = array_search($js,$this->js_arr)) === false)
              $this->js_arr[] = $js; 
        } 
        // 
            
        //$r->set('js', $this->js_arr);  
    }
    
    function loadCoreController(){
    // [URL] /core/controllername/actionname
    
        $core_controller_name = $this->getURIarg(1);
        
        if($core_controller_name === false) die('Bad controller name'); //header("Location:/badurl/"); // редирект на заведомо отсутсвующий УРЛ
        
        try {   
            $core_controller_name = ucfirst($core_controller_name) . 'Controller';
            $Controller = new $core_controller_name ();   
        } catch (Exception  $e) {
             fb($e->getMessage());
        }
        
        if(($action_name = $this->getURIarg(2)) === false)  $Controller->action = 'basic';
        else $Controller->action = $action_name;
        
        $method_name = $action_name . "Action";

        if(method_exists ( $Controller, $method_name )) $Controller->$method_name();
        else die('Bad method name'); // можно вместо этого писать в логи и редиректить куда-либо
        
        
        
       exit;
    }
    
    /*
    public static function action(){
        //die(var_dump(__CLASS__));
        $obj = static::getInstance();
         
        //$method = $obj->action;
        //$obj->$method();  
        
        //die(var_dump($obj->action));
    } // --
    */
    
    function addModulCss($modul){   
        $filename = 'style.css';
        $css = $_SERVER['DOCUMENT_ROOT'] . "/Moduls/$modul/$filename";
        if(is_file($css)){      
            $css_str = "<link media=\"screen\" href=\"/Moduls/$modul/$filename\" type=\"text/css\" rel=\"stylesheet\">";
            $this->css_arr[] = $css_str;
        }
    } // -- addModulCss
    
    function addModulJs($modul){    
        $filename = 'script.js';
        $js = $_SERVER['DOCUMENT_ROOT'] . "/Moduls/$modul/$filename";
        if(is_file($js)){      
            $js_str = "<script src=\"/Moduls/$modul/$filename\" type=\"text/javascript\"></script>";
            $this->js_arr[] = $js_str;
        }  
    } // -- addModulJs
    
     function addJs($js, $basic_dir = true, $enc = ''){
        $modul = $this->registry->get('modul_index');  
     
        if($basic_dir) $prefix = "/js/";
        else $prefix = "/Moduls/$modul/"; 
        
        if($enc != '') $encoding = "charset='$enc'"; else  $encoding = '';
          
        $file = $_SERVER['DOCUMENT_ROOT'] . $prefix . $js; 
         
        if(is_file($file)){ 
            $js_str = "<script src=\"$prefix$js\" type=\"text/javascript\" $encoding></script>";  
            $this->js_arr[] = $js_str;   
            
            //if(isset($this->js_arr)) if(is_array($this->js_arr)) echo 1; else echo -1;
            
            
            $r = Registry::getInstance(); 
            
            $r->set('js', $this->js_arr);   
        }   
    } // -- addModulJs
    
    function addOuterJs($js){
        $js_str = "<script src=\"$js\" type=\"text/javascript\"></script>";  
        $this->js_arr[] = $js_str; 
        $r = Registry::getInstance(); 
            
            $r->set('js', $this->js_arr); 
    } // --
    
    /*
    function jsToRegistry(){
         $r = Registry::getInstance(); 
            if( $r->has('js') ){ 
              $reg_js = $r->get('js');var_dump($this->js_arr); 
              if(is_array($reg_js)){  
                foreach($reg_js as $k => $v){  
                  foreach($this->js_arr as $key => $val){
                    //if( strpos($v, $js) ) echo '+';
                    
                  }  
                }
              
                //$this->js_arr = array_merge( $this->js_arr, $reg_js);  
              }  
            } 
    }*/
    
    function output(){
    
        return $this->html;
    
    } // -- output
    
    function getBasicModulTpl(){
    // [!]
        $tpl = 'index.tpl';
      
        $q = "SELECT * FROM moduls WHERE modul_index = '{$this->modul_index}' ";
        $r = mysql_query($q);  
        if(!$r){fb(33);
          $this->view->Set('mess','db connection was dropped due to getting basic tpl name in Controller::getBasicModulTpl(). Maybie U need to create database first');
          return '404.tpl';
        }  
        if( mysql_num_rows($r) > 0){
        
          $this->modul_info = mysql_fetch_assoc($r);
          
          if(trim($this->modul_info['basic_tpl']) != '')
            $tpl = $this->modul_info['basic_tpl'];
        }  
      
        return $tpl;
    } // --
        
    
    function modulExists($modul = false){
    //  true, если модуль с таким именем существует (настоящий или мнимый)
     
        if($modul === false) $modul = $this->modul_index;
        if($modul == false OR $modul == '') return false;
          
        if( $this->virtualModulExists($modul) ){  
          
          $this->registry->set('virtual_modul_index', $modul);
          
          $modul = $this->registry->get('modul_index');  
        }
          
        $q = "SELECT * FROM moduls WHERE modul_index = '$modul' ";
        $r = mysql_query($q); //var_dump($r); SELECT * FROM moduls WHERE modul_index = 'face'
        if(!$r) return -1;
        if( mysql_num_rows($r) > 0){
        
          $this->modul_info = mysql_fetch_assoc($r);    //var_dump($modul_info);
        
          $modul = strtolower($modul);
          $first = substr($modul,0,1);
          $tail = substr($modul,1);
          $this->modul_name = strtoupper($first) . $tail; //var_dump($this->modul_name); // Face
          if(is_dir(SITE . "/Moduls/$this->modul_name")){
         
              if(is_file(SITE . "/Moduls/$this->modul_name/modul.$this->modul_name.php")){ //echo SITE . "/Moduls/$this->modul_name/modul.$this->modul_name.php";
                  require SITE . "/Moduls/$this->modul_name/modul.$this->modul_name.php";
                    
                  if(class_exists($this->modul_class_name = $this->modul_name."Modul")){ // FaceModul
                     return true;
                  }  else return false;//echo 'класс модуля не найден';
              }
          } 
        }
    
        return false;
    } // --
    
    function virtualModulExists($modul){
           
        $q = "SELECT a.*, m.* FROM modul_alias a LEFT JOIN moduls m ON a.modul_id = m.id_modul  WHERE alias = '$modul' ";
        $r = mysql_query($q);
        if(!$r) return false;
        if( mysql_num_rows($r) > 0){
      
          $modul_info = mysql_fetch_assoc($r); //var_dump($modul_info);
          $this->registry->set('modul_alias', $modul);
          $this->registry->set('modul_index', $modul_info['modul_index']);
          return true;
        }  
        
        return false;
    } // -- virtualModulExists
 
    
    function capitalizeFirst($str){
        $first = mb_substr($str,0,1, 'UTF-8');//первая буква
        $last = mb_substr($str,1);//все кроме первой буквы
        $first = mb_strtoupper($first, 'UTF-8');
        $last = mb_strtolower($last, 'UTF-8');
        return $first.$last;
    } // --
     
    function methodExists(){
    // ищем метод $this->modul_class_name::actionFaceAsd()
    // В случае неудачи - $this->modul_class_name::asd()
   
        $method = "action" . $this->capitalizeFirst($this->modul_index) . $this->capitalizeFirst($this->method);  
        // $this->modul_index; // face
        // $this->registry->get('modul_index'); // Face
        
        if( method_exists($this->modul_class_name,$method) ){ $this->method = $method; return true; }
          
        if( method_exists($this->modul_class_name,$this->method) )  return true;
         
        return false;
    
    } // --   
     
     function getParam(){
     // из УРЛ
     // из POST
     // из сессии?
     // из куки?
     }
     
     function getURIarg( $index = null ){
  // аналог функции ArgMod()
  // возвращает нужный аргумент из URI текущей страницы, массив аргументов или false
  // [аргумент 0] = modul_index
  // если аргумент - это гет-переменные (?a=1&b=2) , метод вернет false, но результат можно взять из массива $this->ArgMod
  
      //$modul_index = 'main';

      $arr_is_empty = true;
      
      //if (isset($index)) $index--;

      // создаем массив URI-аргументов
      //if(isset($arg_arr)) unset($arg_arr);
      $request_uri = $_SERVER['REQUEST_URI'];
      $request_uri_arr = explode("/", $request_uri);
      
      for($i=0; $i<count($request_uri_arr); $i++){
        if($request_uri_arr[$i] != '') $arr_is_empty = false;
        else $request_uri_arr[$i] = false;
      }
      
      if($arr_is_empty) return false;
      
      for($i=0; $i<count($request_uri_arr); $i++){
          if($request_uri_arr[$i] !== false) $arg_mod[] = $request_uri_arr[$i];
      }// var_dump($arg_mod);
      
      
      if(isset($arg_mod)){
        if(isset($index)){
          if(isset($arg_mod[$index])){
            preg_match("/\?/",$arg_mod[$index],$matches);
          
            if(isset($matches)){
              if(isset($matches[0])){
              } // return false;
              else  
                return $arg_mod[$index];
            } else  
              return $arg_mod[$index];
          }    
        } else {
          return $arg_mod;     
        }
        $this->ArgMod = $arg_mod;
      }
        
      
      /*
      for($i=0; $i<count($request_uri_arr); $i++){
          if ($request_uri_arr[$i] == $modul_index){
          // если URI содержит имя текущего модуля, создаем массив аргументов и переходим к след итерации
              $arg_arr = array();
              continue;
          }
          if (isset($arg_arr)){
          // когда массив аргументов создан, начинаем их вытягивать из УРИ
              $arg_arr[] = $request_uri_arr[$i]; 
          }
      }//

      if(isset($index) AND isset($arg_arr[$index]))
        return  $arg_arr[$index];

      elseif (!isset($index) AND isset($arg_arr))
        return $arg_arr;

      elseif (isset($index) AND isset($arg_arr) AND !isset($arg_arr[$index]))
        return false;
      */  
      return false;
  } // -- getURIarg()
  
  function isUserAuth($user = 'user'){
  
      switch($user){
        case 'user':
        
            if(isset($_SESSION['user']->name))
              return true;
        break;
        
        case 'admin':
        
            if(isset($_SESSION['admin']->name))
              return true;
        break;
        
        default:
        break;
      }
  
      return false;
  
  } // -- isUserAuth
    
} //

interface BasicModulControllerInterface {
// шаблон контроллеров модулей
   //function render(); // поместить в другой интерфейс?
    
   
} // -- BasicModulControllerInterface

class BasicModulController extends Controller {
// Дополнительный класс-прослойка, от которого наследуются контроллеры модулей
    public $widget_inputdata_arr;
    public $model;
    public $view;
    public $action; // имя метода-точки входа     
    public $modul_obj;     
    public $firephp;
    public $registry;
    
    protected $sections_arr;
     protected $modul_id;
    
    private $basic_act_param;
    private $life_modul_index;

    function __construct(){
  
        $registry = Registry::getInstance();
        $this->registry = $registry;
  
        defined('MODUL') ||
          define('MODUL',$registry->get('modul_index')); // Face
        defined('MODUL_INDEX') ||
                    define('MODUL_INDEX',strtolower( MODUL)); //face
                    
        require_once $_SERVER['DOCUMENT_ROOT']."/Moduls/".MODUL."/".MODUL.".php"; 
        require_once $_SERVER['DOCUMENT_ROOT']."/Moduls/".MODUL."/view.".MODUL.".php";             
      
         
        $this->firephp = $registry->get('firephp');
         
        $user_logged = User::isUserLogged();
      
      
        // тест
        // [!] это надо вызывать не в конструкторе
        // $a = static::getView();fb($a);
        
        
        //$global_view = $registry->get('View');
        //console(static::getModulIndex());
        
        //$global_view->Set('asd','asd');
        
        $this->addJs('jquery.mousewheel.min.js',true,'utf-8');
        $this->addJs('jquery.gallery.js',true );
    }
   
     
    
    function getSections(){
        $modul_id =  $this->getModulIdByIndex(Registry::getInstance()->get('modul_index'));  
          
        $q = "SELECT * FROM sections   
              WHERE modul_id = $modul_id ";
        $r = mysql_query($q);
        if(!$r) return false;
        if( mysql_num_rows($r) > 0){
          while($row = mysql_fetch_assoc($r)){
               $row['edit_link'] = '';
               $row['class_name'] = $this->model->translit( $row['seo_link'] );
               $row['class_name'] = preg_replace('/_/i','',$row['class_name']);
              if(User::isAdmin()) $row['edit_link'] = '/' . strtolower(Registry::getInstance()->get('modul_index')) .'/'. $row['seo_link'] .'/'. 'edit'; // /tour/photo/edit
              
              $sections[] = $row;
          } 
          return   $sections;
        }   
        
        return false;
    }
    
    function getModulIdByIndex($modul_index){
        $modul_index = strtolower($modul_index);
    
        $q = "SELECT * FROM  moduls  
              WHERE modul_index = '$modul_index' ";
        $r = mysql_query($q);
        if(!$r) return false;
        if( mysql_num_rows($r) > 0){
      
          $modul_info = mysql_fetch_assoc($r);
          
          return $modul_info['id_modul'] ;
        } 
        
        return false;
    } // -- 
    
    
    
    static function getInstance(){
        if (!isset(self::$instance)) {
            $className = __CLASS__;
            self::$instance = new $className;
        }

        return self::$instance;
    } // --
    
    
    function sectionLoader(){
        
        
        static::router($this->registry->get('section_id'));
         
    }
    
    function loadMethod($method){  
    //
       // return eval("return \$this->modul->".$method."();");
       // return eval("return \$this->".$MD."();");
       // die(var_dump('aaaa'));
       // static::action();
    } // -- loadMethod
    
    public  function load(){  
        //  [!] рабочий
        static::action();
        //$this->modul_obj = static::getInstance(); die(var_dump(__CLASS__));
        //var_dump( $this->modul_obj);
        //eval("return \$this->modul_obj->".$method."();");
    } // -- 
    
} // -- BasicModulController
  
class coreController extends Controller {

     public $action;
     
     function json($arr){
        header('Content-Type: application/json; charset=utf-8');
        //header('X-JSON: '.$myJsonData);
        header("Cache-control:no-cache");
        //session_start();
     
        echo json_encode($arr, JSON_FORCE_OBJECT);
     } // --

}
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
?>